// author: shelman
// description：汇集了使用XOR进行数据加解密的接口
#ifndef xorcrypto_h
#define xorcrypto_h



#include <stdio.h>
#include <stdlib.h>
#include <string.h>


#ifdef __cplusplus
extern "C"
{
#endif

// 异或加解密算法：在异或加解密中，这个过程是可逆的。
// 加密：将明文与密钥进行逐位异或运算得到密文。
// 解密：密文和同样的密钥进行异或运算得到明文。

#if defined(WIN32) || defined(WIN64) || defined(_WIN32) || defined(_WIN64)
#define XORCRYPTO_DLL_EXPORT __declspec(dllexport)
#else
#define XORCRYPTO_DLL_EXPORT __attribute__((visibility("default")))
#endif

/******************************************************************
 * 功能：使用传入的key进行加解密
 * 输入参数：
 *      pInData：待加解密的数据
 *      uiInLen：待加解密的数据长度
 *      pKey：加解密key数据
 *      uiKeyLen：加解密key数据长度
 * 输出参数：
 *      pOutData：加解密的结果数据
 *      uiOutLen：加解密的结果数据长度
 * 返回值：
 *      int：执行结果，0 - 成功，非0 - 失败
 * ****************************************************************/
XORCRYPTO_DLL_EXPORT int XORCrypto(const char* pInData, unsigned int uiInLen
                                   , const char* pKey, unsigned int uiKeyLen
                                   , char* pOutData, unsigned int uiOutLen);

/******************************************************************
 * 功能：使用默认的key进行加解密
 * 输入参数：
 *      pInData：待加解密的数据
 *      uiInLen：待加解密的数据长度
 * 输出参数：
 *      pOutData：加解密的结果数据
 *      uiOutLen：加解密的结果数据长度
 * 返回值：
 *      int：执行结果，0 - 成功，非0 - 失败
 * ****************************************************************/
XORCRYPTO_DLL_EXPORT int XORCryptoByDefaultKey(const char* pInData, unsigned int uiInLen
                                               , char* pOutData, unsigned int uiOutLen);

#ifdef __cplusplus
} // extern "C"
#endif

#endif // xorcrypto_h
